package com.enlorenz.common.geo.analyzer.distance.test;


import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.copote.adc.dao.position.PositionServer;
import com.copote.adc.entity.runingEntity.Position;
import com.enlorenz.common.geo.util.DateUtil;
import com.enlorenz.common.geo.util.GeographyUtil;
import com.enlorenz.core.cache.FileMapCache;
import com.enlorenz.core.cache.oper.DefaultCacheOper;
import com.enlorenz.core.cache.oper.IMethodProxy;

public class PosAnaKimCommbo {
	/**
	 * @param args
	 * @throws Exception 
	 */
	public static void main(String[] args) throws Exception {
		args=new String[3];
		args[0]="7870";
		args[1]="20130801000000";
		args[2]="20130819080000";
		
		//args[1]="20130802000000";
		//args[2]="20130803000000";
		
		FileMapCache cache=new FileMapCache("f","f1");
		cache.setFilePath("c:\\test2\\"+args[0]+"_"+args[1]+"_"+args[2]+".dat");
		
		
		
		cache.loadCache();
		DefaultCacheOper cacheOper=new DefaultCacheOper(cache);
		List<Position> posList=null;
		/*List<Position> posList=(List<Position>)cacheOper.doCache(args, new IMethodProxy(){
			@Override
			public Object execute(Object[] args) throws Exception {
				PositionServer ps=new PositionServer();
				return ps.getAllHisPosition(args[0].toString(),args[1].toString(),args[2].toString());
			}
		});*/
		cache.save();
		
		System.out.println(posList.get(0).getN_lcjs()+":"+posList.get(posList.size()-1).getN_lcjs());
		
		List<Position> tmpList=new ArrayList<Position>(posList.size());
		Position pp=null;
		Map<String,Integer> map=new HashMap();
		for(Position p:posList){
			if(null == pp){
				pp=p;
				tmpList.add(p);
			}else{
				// || pp.getPosType() == 2
				if(p.getD_wzsj().equals(pp.getD_wzsj()) || pp.getPosType() == 2){
					
				}else{
					tmpList.add(p);
				}
				pp=p;
			}
			Integer iii=map.get(p.getD_wzsj().substring(0,8));
			if(null == iii){
				iii=0;
			}
			iii++;
			map.put(p.getD_wzsj().substring(0,8), iii);
		}
		System.out.println(map);
		posList=tmpList;
		/*for(Position p:posList){
			System.out.println(p.getD_wzsj());
		}*/
		
		System.out.println("查询日期:"+DateUtil.transStandardDate2EnViewDate(args[1])
			+"~"+DateUtil.transStandardDate2EnViewDate(args[2]));
		int allSize=posList.size();
		System.out.println("位置数量："+allSize);
		double dis=0;
		double lc=0;
		double extend=0;
		Position pre=null;
		for(Position p:posList){
			if(null == pre){
				pre=p;
				continue;
			}
			
			if(pre.getN_sxbz().equals("1") && p.getN_sxbz().equals("1")
					&& ((!pre.getC_sd().equals("0") && p.getC_sd().equals("0"))
					||!p.getC_sd().equals("0")) && (!pre.getC_jd().equals("0") &&!pre.getC_wd().equals("0")&&
							!p.getC_jd().equals("0") &&!p.getC_wd().equals("0"))){
					double cut1=GeographyUtil.computerDistanceFromPoint(pre, p);
					dis+=cut1;
			}else{
				if(Double.valueOf(p.getN_lcjs())>=Double.valueOf(pre.getN_lcjs())){
					double val=Double.valueOf(p.getN_lcjs())-Double.valueOf(pre.getN_lcjs());
					if(val>0){
						if(val>1000){
							//System.out.println("C:"+p.getD_wzsj()+":P:"+pre.getD_wzsj()+":"+val);
						}
						dis+=val;
						extend+=val;
					}
				}
			}
			
			pre=p;
			
		}
		System.out.println("锁星点距离："+(int)dis);
		System.out.println("补偿:"+extend);
		//System.out.println("里程点距差："+(int)allCut);
	}

}
